'use strict';
const db = uniCloud.database()

exports.main = async (event, context) => {
	try {
		console.log('========== 开始执行定时检查 ==========')
		
		// 获取所有正在使用的台球桌记录
		const usageRes = await db.collection('yijia-taiqiu-usage')
			.where({
				status: 'using'
			})
			.get()
			
		console.log('查询到的使用记录数量：', usageRes.data ? usageRes.data.length : 0)
		console.log('使用记录详情：', JSON.stringify(usageRes.data, null, 2))
			
		if (!usageRes.data || usageRes.data.length === 0) {
			console.log('没有正在使用的台球桌')
			return {
				code: 200,
				message: '没有正在使用的台球桌'
			}
		}
		
		const results = []
		
		// 遍历每个使用记录
		for (const usage of usageRes.data) {
			console.log('\n========== 处理新的台球桌记录 ==========')
			const { user_id, table_id, start_time, hourly_rate, _id } = usage
			console.log('台球桌基本信息：', {
				table_id,
				user_id,
				start_time: new Date(start_time).toLocaleString(),
				hourly_rate,
				record_id: _id
			})
			
			// 计算当前使用时长和费用
			const endTime = new Date()
			const startTime = new Date(start_time)
			const durationMs = endTime.getTime() - startTime.getTime()
			const minutes = Math.ceil(durationMs / (1000 * 60))
			const minuteRate = hourly_rate / 60
			const billableMinutes = Math.max(minutes, 20)
			const totalAmount = (billableMinutes * minuteRate).toFixed(2)
			
			console.log('费用计算详情：', {
				startTime: startTime.toLocaleString(),
				endTime: endTime.toLocaleString(),
				durationMs,
				minutes,
				minuteRate,
				billableMinutes,
				totalAmount,
				hourly_rate
			})
			
			// 查询用户余额
			const userRes = await db.collection('uni-id-users')
				.where({
					_id: user_id
				})
				.get()
				
			console.log('用户信息查询结果：', JSON.stringify(userRes.data, null, 2))
				
			if (!userRes.data || userRes.data.length === 0) {
				console.log('未找到用户信息')
				results.push({
					table_id,
					user_id,
					status: 'error',
					message: '未找到用户信息'
				})
				continue
			}
			
			const user = userRes.data[0]
			const currentBalance = parseFloat(user.balance || 0)
			
			console.log('余额检查：', {
				user_id,
				userName: user.nickname || user.username,
				currentBalance,
				requiredAmount: parseFloat(totalAmount),
				isBalanceSufficient: currentBalance >= parseFloat(totalAmount)
			})
			
			// 如果余额不足，执行关台操作
			if (currentBalance < parseFloat(totalAmount)) {
				console.log('余额不足，开始执行关台操作')
				
				try {
					// 扣除用户余额
					const updateBalanceRes = await db.collection('uni-id-users').doc(user_id).update({
						balance: currentBalance - parseFloat(totalAmount)
					})
					console.log('更新用户余额结果：', updateBalanceRes)
					
					// 更新使用记录
					const updateUsageRes = await db.collection('yijia-taiqiu-usage').doc(_id).update({
						end_time: endTime.getTime(),
						status: 'finished',
						total_amount: parseFloat(totalAmount)
					})
					console.log('更新使用记录结果：', updateUsageRes)
					
					results.push({
						table_id,
						user_id,
						status: 'closed',
						message: '余额不足，已自动关台',
						details: {
							minutes,
							billableMinutes,
							totalAmount,
							previousBalance: currentBalance
						}
					})
					
					console.log('关台操作完成')
				} catch (error) {
					console.error('关台操作失败：', error)
					results.push({
						table_id,
						user_id,
						status: 'error',
						message: '关台操作失败：' + error.message
					})
				}
			} else {
				console.log('余额充足，无需关台')
			}
		}
		
		console.log('\n========== 检查完成 ==========')
		console.log('处理结果：', JSON.stringify(results, null, 2))
		
		return {
			code: 200,
			message: '检查完成',
			data: results
		}
		
	} catch (e) {
		console.error('定时检查失败：', e)
		return {
			code: 500,
			message: '操作失败',
			error: e.message || '未知错误'
		}
	}
} 